function [bestScheduledTargets, bestScheduledPriorities, status] = SCP_LocalSearch(PQ, s1OlTargets, s1OlBins, s2OlTargets, s2OlBins, scheduledTargets, scheduledPriorities)

origScheduledTargets = scheduledTargets;
origScheduledPriorities = scheduledPriorities;

bestScheduledTargets = scheduledTargets;
bestScheduledPriorities = scheduledPriorities;

while (PQ_Size(PQ) > 0)
  [PQ, target_id, priority] = PQ_Fetch_Task(PQ, 2);
  if (target_id < 1) || (priority < 0)
    break;
  end

  if any(origScheduledTargets == target_id)
    continue;
  end

  scheduledTargets = target_id;
  scheduledPriorities = priority;

  [scheduledTargets, scheduledPriorities, status] = SCP_Mutation(origScheduledTargets, origScheduledPriorities, s1OlTargets, s1OlBins, s2OlTargets, s2OlBins, scheduledTargets, scheduledPriorities);
  if ~status
    continue;
  end

  [scheduledTargets, scheduledPriorities, status] = SCP_Construction(PQ, s1OlTargets, s1OlBins, s2OlTargets, s2OlBins, scheduledTargets, scheduledPriorities);
  if ~status
    continue;
  end

  [bestScheduledTargets, bestScheduledPriorities, status] = GRASP_UpdateSolution(PQ, bestScheduledTargets, bestScheduledPriorities, scheduledTargets, scheduledPriorities);
  if ~status
    continue;
  end
end

status = 1;
end % function